/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio.cargador;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import datos.*;
import interfaz.Dibujo;
import interfaz.expedienteFrame;
import java.io.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import negocio.contenedor.lista_cliente;
import negocio.contenedor.lista_historia_medica;
import negocio.contenedor.lista_tratamiento;

/**
 *
 * @author David
 */
public class cargador implements Serializable{

   public Connection conn;
    
    public void conectar() {
        String bd = "clinica";
        String login = "clinicauser";
        String password = "clinicauser";
        String url = "jdbc:mysql://localhost/" + bd;
        conn = null;
        try {
            Class.forName("com.mysql.jdbc.Connection");
            conn = (Connection) DriverManager.getConnection(url, login, password);
            if (conn != null) {
                System.out.println("Conexion a base de datos " + url + " ... Ok");
            }
        } catch (SQLException ex) {
            System.out.println("Hubo un problema al intentar conectarse con la base de datos " + url);
            JOptionPane.showMessageDialog(null, "Error:a "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "Error: "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }
    }//Fin de conectar
    
   
    /****************************************************Cliente********************************************************************/
    
    public boolean instertar_cliente_db(cliente c){
        Statement s;
        try{
            s = (Statement) conn.createStatement();
            //se coloca si se tiene encargado o no.
            int encargado = 0;
            if(c.getEncargado() != null){
                encargado = 1;
            }
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            s.executeUpdate("INSERT INTO clinica.cliente(fecha_ingreso, fecha_nacimiento, id_cliente_cedula, nombre, apellidos, estado_civil, genero, direccion, telefono, celular, fax, email, ocupacion, lugar_trabajo, telefono_lugar_trabajo, encargado,activo)"
                    +" VALUES("
                    +"NOW(),'"+formatter.format(c.getFecha_nacimiento())
                    +"',"+c.getId_cliente_cedula()+",'"+c.getNombre()+"','"+c.getApellidos()
                    +"','"+c.getEstado_civil()+"','"+c.getGenero()+"','"+c.getDireccion()
                    +"',"+c.getTelefono()+","+c.getCelular()+","+c.getFax()+",'"+c.getEmail()+"','"+c.getOcupacion()
                    +"','"+c.getLugar_trabajo()+"',"+c.getTelefono_lugar_trabajo()+","+encargado+","+1/*1 para activar el cliente*/+")");            
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    /**
     * Este metodo inserta a un cliente por el metodo express.
     */
    public boolean instertar_cliente_express_db(cliente c) {
         Statement s;
        try{
            s = (Statement) conn.createStatement();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            s.executeUpdate("INSERT INTO clinica.cliente(fecha_ingreso, id_cliente_cedula, nombre, apellidos,encargado, activo)"
                           +" VALUES(NOW(),"+c.getId_cliente_cedula()+",'"+c.getNombre()+"','"+c.getApellidos()+"',0,"+1/*Activo*/+")");            
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    /**
     * Este metodo modifica una bailarina en la base de datos.
     */
    public boolean modificar_cliente_db(int id, cliente c){
        Statement s;
        try{
            s = (Statement) conn.createStatement();
            int encargado = 0;
            if(c.getEncargado() != null){
                encargado = 1;
            }
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");                       
            s.executeUpdate("UPDATE clinica.cliente"+
                    " SET fecha_nacimiento='"+formatter.format(c.getFecha_nacimiento())+"'"+
                    " ,nombre='"+c.getNombre()+"'"+
                    " ,apellidos='"+c.getApellidos()+"'"+
                    " ,estado_civil='"+c.getEstado_civil()+"'"+
                    " ,genero='"+c.getGenero()+"'"+
                    " ,direccion='"+c.getDireccion()+"'"+
                    " ,telefono="+c.getTelefono()+
                    " ,celular="+c.getCelular()+
                    " ,fax="+c.getFax()+
                    " ,email='"+c.getEmail()+"'"+
                    " ,ocupacion='"+c.getOcupacion()+"'"+
                    " ,lugar_trabajo='"+c.getLugar_trabajo()+"'"+
                    " ,telefono_lugar_trabajo="+c.getTelefono_lugar_trabajo()+
                    " ,encargado="+encargado+
                    " WHERE id_cliente_cedula="+c.getId_cliente_cedula());
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    /**
     * El metodo eliminar cliente, no elimina al cliente, este lo desactiva.
     */
    public boolean eliminar_cliente_db(int id_cedula_cliente) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();                       
            s.executeUpdate("UPDATE clinica.cliente SET activo=0 WHERE id_cliente_cedula="+id_cedula_cliente);
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    /**
     * El metodo activa un cliente.
     */
    public boolean activar_cliente_db(int id_cedula_cliente) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();                       
            s.executeUpdate("UPDATE clinica.cliente SET activo=1 WHERE id_cliente_cedula="+id_cedula_cliente);
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    /********************************ODONTOGRAMA**************************************************/
    public void guardaOdontograma(int id,Diente diente)
    {
        Statement s;
        String query = "SELECT * FROM cliente";
        try{
            s= (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery(query);
            while(rs.next())
            {               
               
               if((rs.getObject("id_cliente_cedula").toString()).equals(Integer.toString(id))){
                   
                   ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
                   try {
                       ObjectOutputStream oos = new ObjectOutputStream(byteArray);
                       oos.writeObject(diente);
                       PreparedStatement ps = null;
                       try {
                           ps = (PreparedStatement) conn.prepareStatement("insert into odontograma values("+ id + ",?)");
                       } catch (SQLException ex) {
                           Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                       }
                       try {
                           ps.setBytes(1, byteArray.toByteArray());
                       } catch (SQLException ex) {
                           Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                       }
                       try {
                           ps.execute();
                       } catch (SQLException ex) {
                           Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                       }
                   } catch (IOException ex) {
                       Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                   }
                   
               }
            }
            rs.close();
        
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }
    
    }
    
    
    public void modificarOdontograma(int id, Diente diente){
        Statement s;
        String query = "SELECT * FROM cliente";
        try{
            s= (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery(query);
            while(rs.next())
            {               
               
               if((rs.getObject("id_cliente_cedula").toString()).equals(Integer.toString(id))){
                   
                   ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
                   try {
                       ObjectOutputStream oos = new ObjectOutputStream(byteArray);
                       oos.writeObject(diente);
                       PreparedStatement ps = null;
                       try {
                           ps = (PreparedStatement) conn.prepareStatement("UPDATE odontograma "
                                   + "SET "
                                   + "odontograma= ?"+
                                   " where id="+ id);
                       } catch (SQLException ex) {
                           Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                       }
                       try {
                           ps.setBytes(1, byteArray.toByteArray());
                       } catch (SQLException ex) {
                           Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                       }
                       try {
                           ps.execute();
                       } catch (SQLException ex) {
                           Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                       }
                   } catch (IOException ex) {
                       Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                   }
                   
               }
            }
            rs.close();
        
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }    
    
    
    }
    
    public Diente cargaOdontograma(int id, Diente d)
    {
            Diente diente = null;
           Statement s;
        String query = "SELECT * FROM odontograma";
        try{
            s= (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery(query);
            while(rs.next())
            {               
               
               if((rs.getObject("id").toString()).equals(Integer.toString(id))){
                   
                   Blob blob = rs.getBlob("odontograma");
                   
                   ObjectInputStream ois = null;
                    try {
                        ois = new ObjectInputStream(blob.getBinaryStream());
                    } catch (IOException ex) {
                        Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    try {
                        diente = (Diente) ois.readObject();
                    } catch (IOException ex) {
                        Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex);
                    }
                   
               }
            }
            rs.close();
        
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        } 
        
        return diente;
    }

    public void cargaID(JComboBox o,lista_cliente lista){
        int cont;
        o.removeAllItems();
        for (cont = 0; cont < lista.size(); cont++) {
            o.addItem(lista.getElemento(cont).getId_cliente_cedula());
            
            
    
        }
        
    }
    
    public boolean modificarExamen(expedienteFrame fr){
    
        Boolean caries;
        Boolean properiodental;
        Boolean atm;
        Boolean otroTipoPatologia;
        Boolean radioPanoramica;
        Boolean radioPeriapciales;
        Boolean radioAleta;
        Boolean radioOclusal;
        Boolean otroTipo;
        Boolean presenciaPatologia;
        String especificar;
        String observaciones;
        
        if(fr.getjRadioButtonCarieSI().isSelected())
        {
            caries = true;
        }else{
            caries = false;
        }
        
        if(fr.getjRadioButtonProPeriodentalSI().isSelected())
        {
            properiodental = true;
        }else{
            properiodental = false;
        }
        
         if (fr.getjRadioButtonProATMSI().isSelected()) {
            atm = true;
        } else {
            atm = false;
        }
         
        if (fr.getjRadioButtonOtroTipoPatologiaSI().isSelected()) {
            otroTipoPatologia = true;
        } else {
            otroTipoPatologia = false;
        }
        
        if (fr.getjRadioButtonRadioPanoramica().isSelected()) {
            radioPanoramica = true;
        } else {
            radioPanoramica = false;
        }
        if (fr.getjRadioButtonRadioPeriapciales().isSelected()) {
            radioPeriapciales = true;
        } else {
            radioPeriapciales = false;
        }
        if (fr.getjRadioButtonRadioAleta().isSelected()) {
            radioAleta = true;
        } else {
            radioAleta = false;
        }
        if (fr.getjRadioButtonRadioOclusal().isSelected()) {
            radioOclusal = true;
        } else {
            radioOclusal = false;
        }
        if (fr.getjRadioButtonOtroTipo().isSelected()) {
            otroTipo = true;
        } else {
            otroTipo = false;
        }
        if (fr.getjRadioButtonPrePatologiaSI().isSelected()) {
           presenciaPatologia = true;
        } else {
           presenciaPatologia = false;
        }
        especificar = String.valueOf(fr.getjTextAreaEspecificar().getText());
        observaciones = String.valueOf(fr.getjTextAreaObservaciones().getText());
         
        
        
        Statement s;
            String[] split_cliente = fr.getList_clientes().getSelectedValue().toString().split("/");System.out.println(split_cliente[0
                    ]);
        try{
            s = (Statement) conn.createStatement();            
                   
             s.executeUpdate("UPDATE examenes"+
                   " SET "+
                     "caries='" + caries + 
                     "',problemasPeriodental='" + properiodental + 
                     "',problemasATM='" + atm + 
                     "',OtroTipoPatologia='" + otroTipoPatologia + 
                     "',RadiografiaPanoramica='" + radioPanoramica + 
                     "',RadiografiaPeriapcial='" + radioPeriapciales + 
                     "',RadiografiaAleta='" + radioAleta + 
                     "',RadiografiaOclusal='" + radioOclusal + 
                     "',OtroTipo='" + otroTipo + 
                     "',PresenciaPatologia='" + presenciaPatologia + 
                     "',Especificar='" + especificar + 
                     "',Observaciones='" + observaciones + 
                      "' WHERE idCliente="+Integer.parseInt(split_cliente[0].toString()));
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    
    }
    
    public boolean guardarExamen(int id){
        
   Statement s;
        try{
            s = (Statement) conn.createStatement();            
            s.executeUpdate("INSERT INTO examenes "+
                            "(idCliente) VALUES("+id+")");       
            return true;
        }catch (SQLException ex){
            JOptionPane.showMessageDialog(null, "Error: "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    
    }
    
//    public examenes cargarExamenes(){
//        examenes ex;
//        
//        return ex;
//    }
    
    
    public examen cargarExamen(int id){
        examen ex = null;
        Statement s = null;
        try {
            s = (Statement) conn.createStatement();
        } catch (SQLException ex1) {
            Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex1);
        }
        ResultSet rs = null;
        try {
            rs = s.executeQuery("SELECT * FROM examenes where idCliente=" + id);
        } catch (SQLException ex1) {
            Logger.getLogger(cargador.class.getName()).log(Level.SEVERE, null, ex1);
        }
        try {
            try{
            while (rs.next()) {
                if (rs.getObject("idCliente").toString().equals(Integer.toString(id))) {
                    ex = new examen((String) rs.getObject("caries").toString(), (String) rs.getObject("problemasPeriodental").toString(), (String) rs.getObject("problemasATM").toString(),
                            (String) rs.getObject("OtroTipoPatologia").toString(), (String) rs.getObject("RadiografiaPanoramica").toString(), (String) rs.getObject("RadiografiaPeriapcial").toString(),
                            (String) rs.getObject("RadiografiaAleta").toString(), (String) rs.getObject("RadiografiaOclusal").toString(), (String) rs.getObject("OtroTipo").toString(),
                            (String) rs.getObject("PresenciaPatologia").toString(), (String) rs.getObject("Especificar").toString(), (String) rs.getObject("Observaciones").toString());

                }

            }
            
            rs.close();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error: " + e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }
    
    }catch (Exception e){System.out.println("NINGUN EXAMEN ALMACENADO");}
    
        return ex;
    }
    
    
        /********************************ODONTOGRAMA**************************************************/
    
    
    
    
    
    /*
     * Carga los datos de los clientes de la base de datos a lista de clientes
     */
    public void cargar_lista_cliente(lista_cliente lista) {        
        Statement s;
        try{
            s = (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT * FROM cliente AS c LEFT JOIN encargado AS e ON c.id_cliente_cedula = e.cliente  WHERE c.activo=1");
            while(rs.next()){
                encargado e = null;
                /*Si el cliente tiene encargado*/
                    if(rs.getObject("c.encargado").toString().equals("1")){                                            
                                e = new encargado(Integer.parseInt(rs.getObject("id_encargado_cedula").toString()),(String) rs.getObject("parentesco"),(String) rs.getObject("nombre"),
                                                        (String) rs.getObject("apellidos"), (Date) rs.getObject("fecha_nacimiento"), rs.getObject("genero").toString().charAt(0),(String) rs.getObject("direccion"), 
                                                        Integer.parseInt(rs.getObject("telefono").toString()), Integer.parseInt(rs.getObject("celular").toString()), Integer.parseInt(rs.getObject("fax").toString()),
                                                        (String) rs.getObject("ocupacion"),(String) rs.getObject("lugar_trabajo"), Integer.parseInt(rs.getObject("telefono_lugar_trabajo").toString()),(String) rs.getObject("email"));                                                                        
                    }//encargado?
//                lista.agregar_cliente(new cliente((Date) rs.getObject("fecha_ingreso"), (Date) rs.getObject("fecha_nacimiento"), Integer.parseInt(rs.getObject("id_cliente_cedula").toString()), 
//                        (String) rs.getObject("nombre"),(String) rs.getObject("apellidos"),(String) rs.getObject("estado_civil"), rs.getObject("genero").toString().charAt(0),
//                        (String) rs.getObject("direccion"), Integer.parseInt(rs.getObject("telefono").toString()), Integer.parseInt(rs.getObject("celular").toString()),
//                        Integer.parseInt(rs.getObject("fax").toString()),(String) rs.getObject("email"),(String) rs.getObject("ocupacion"),
//                        (String) rs.getObject("lugar_trabajo"), Integer.parseInt(rs.getObject("telefono_lugar_trabajo").toString()),/*encargado*/e));     
                
                cliente c = new cliente();
                String[] cliente_valores = {"fecha_ingreso","fecha_nacimiento","id_cliente_cedula","nombre","apellidos","estado_civil","genero","direccion","telefono","celular","fax","email","ocupacion","lugar_trabajo","telefono_lugar_trabajo"};
                for(int i = 0; i < cliente_valores.length; i++){
                    Object valor = rs.getObject(cliente_valores[i]);
                        if(valor != null){
                            if(cliente_valores[i].equals("fecha_ingreso")){
                                c.setFecha_ingreso((Date) rs.getObject("fecha_ingreso"));
                            }else if(cliente_valores[i].equals("fecha_nacimiento")){
                                c.setFecha_nacimiento((Date) rs.getObject("fecha_nacimiento"));
                            }else if(cliente_valores[i].equals("id_cliente_cedula")){
                                c.setId_cliente_cedula(Integer.parseInt(rs.getObject("id_cliente_cedula").toString()));
                            }else if(cliente_valores[i].equals("nombre")){
                                c.setNombre(rs.getObject("nombre").toString());
                            }else if(cliente_valores[i].equals("apellidos")){
                                c.setApellidos(rs.getObject("apellidos").toString());
                            }else if(cliente_valores[i].equals("estado_civil")){
                                c.setEstado_civil(rs.getObject("estado_civil").toString());
                            }else if(cliente_valores[i].equals("genero")){
                                c.setGenero(rs.getObject("genero").toString().charAt(0));
                            }else if(cliente_valores[i].equals("direccion")){
                                c.setDireccion(rs.getObject("direccion").toString());
                            }else if(cliente_valores[i].equals("telefono")){
                                c.setTelefono(Integer.parseInt(rs.getObject("telefono").toString()));
                            }else if(cliente_valores[i].equals("celular")){
                                c.setCelular(Integer.parseInt(rs.getObject("celular").toString()));
                            }else if(cliente_valores[i].equals("fax")){
                                c.setFax(Integer.parseInt(rs.getObject("fax").toString()));
                            }else if(cliente_valores[i].equals("email")){
                                c.setEmail(rs.getObject("email").toString());
                            }else if(cliente_valores[i].equals("ocupacion")){
                                c.setOcupacion(rs.getObject("ocupacion").toString());
                            }else if(cliente_valores[i].equals("lugar_trabajo")){
                                c.setLugar_trabajo(rs.getObject("lugar_trabajo").toString());
                            }else if(cliente_valores[i].equals("telefono_lugar_trabajo")){
                                c.setTelefono_lugar_trabajo(Integer.parseInt(rs.getObject("telefono_lugar_trabajo").toString()));
                            }else if(e != null){
                                c.setEncargado(e);
                            }//valor declaration                           
                        }//valor??
                    }//for
                    lista.agregar_cliente(c);
            }//while   
            rs.close();
            System.out.println("Clientes cargados.");
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    /**
     * Carga una lista desde la base de datos a la lista local.
     */
    public void cargar_lista_cliente(lista_historia_medica lista_hm, lista_cliente lista_c) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT * FROM historia_medica AS hm,cliente AS c WHERE c.activo=1");
            while(rs.next()){                
                historia_medica hm = new historia_medica();
                String[] hm_valores = {"cliente", "nombre_medico","tipo_sangre","en_caso_emergencia_avisar","telefono","direccion","Parentesco","preguntas","padecimientos"};
                for(int i = 0; i < hm_valores.length; i++){
                    Object valor = rs.getObject(hm_valores[i]);
                        if(valor != null){
                            if(hm_valores[i].equals("cliente")){
                                hm.setCliente(lista_c.buscarCliente(Integer.parseInt(valor.toString())));
                            }else if(hm_valores[i].equals("nombre_medico")){
                                hm.setNombre_medico(valor.toString());
                            }else if(hm_valores[i].equals("tipo_sangre")){
                                hm.setTipo_sangre(valor.toString());
                            }else if(hm_valores[i].equals("en_caso_emergencia_avisar")){
                                hm.setEn_caso_emergencia_avisar(valor.toString());
                            }else if(hm_valores[i].equals("telefono")){
                                hm.setTelefono(Integer.parseInt(valor.toString()));
                            }else if(hm_valores[i].equals("direccion")){
                                hm.setDireccion(valor.toString());
                            }/*else if(hm_valores[i].equals("preguntas")){    <<< AUN NO ESTA IMPLEMENTADO
                                hm.setPreguntas(hm_valores[i]);
                            }else if(hm_valores[i].equals("padecimientos")){
                                hm.setPadecimientos(hm_valores[i]);
                            }*/
                        }//valor??
                    }//for
                    lista_hm.agregar_hm(hm);
            }//while   
            rs.close();
            System.out.println("Clientes cargados.");
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }
    }//func cargar_lista_cliente
    
    public void buscarClientesListaDBt(String text, JList list, lista_cliente listacliente) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT id_cliente_cedula, nombre LIKE '%"+text+"%', apellidos LIKE '%"+text+"%' FROM cliente");
            DefaultListModel model = new DefaultListModel();
            while(rs.next()){                
                if(rs.getInt("nombre LIKE '%"+text+"%'") == 1 || rs.getInt("apellidos LIKE '%"+text+"%'") == 1 ){
                    cliente c = listacliente.buscarCliente(rs.getInt("id_cliente_cedula"));
                        if(c != null){                            
                            model.addElement(c.getId_cliente_cedula()+"/"+c.getNombre()+" "+c.getApellidos());
                        }
                }                
            }//while 
            list.setModel(model);
            rs.close();           
        }catch (SQLException ex){
            JOptionPane.showMessageDialog(null, "Error: "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);          
        }
    }
    
    /*
     * Actualiza un JList con los datos de los clientes.
     */
    public void actualizar_lista_cliente(JList list, lista_cliente lista){
        DefaultListModel model = new DefaultListModel();
        for(int i = 0; i < lista.size(); i++){
            cliente c = lista.getElemento(i);
            model.addElement(c.getId_cliente_cedula()+"/ "+c.getNombre()+" "+c.getApellidos());
        }
        list.setModel(model);
    }
    
    public boolean existe_cliente_id_db(int id_cliente_cedula) {
        Statement s;
        try{            
            s = (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT * FROM cliente WHERE id_cliente_cedula="+id_cliente_cedula);
            if(rs.next()){                
                return true;
            }else{
                return false;
            }//while               
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }

    /****************************************************Encargado********************************************************************/
    
    public boolean insertar_encargado_db(encargado e, int id_cliente) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();            
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            s.executeUpdate("INSERT INTO `clinica`.`encargado`"+
                            "(`id_encargado_cedula`,`cliente`,`parentesco`,`nombre`,`apellidos`,`fecha_nacimiento`,`genero`,`direccion`,`telefono`,`celular`,`fax`,`ocupacion`,`lugar_trabajo`,`telefono_lugar_trabajo`,`email`)"+
                            "VALUES("+
                            e.getId_encargado_cedula()+","+
                            id_cliente+","+
                            "'"+e.getParentesco()+"',"+
                            "'"+e.getNombre()+"',"+
                            "'"+e.getApellidos()+"',"+
                            "'"+formatter.format(e.getFecha_nacimiento())+"',"+
                            "'"+e.getGenero()+"',"+
                            "'"+e.getDireccion()+"',"+
                            e.getTelefono()+","+
                            e.getCelular()+","+
                            e.getFax()+","+
                            "'"+e.getOcupacion()+"',"+
                            "'"+e.getLugar_trabajo()+"',"+
                            e.getTelefono_lugar_trabajo()+","+
                            "'"+e.getEmail()+"'"+
                            ");");       
            return true;
        }catch (SQLException ex){
            JOptionPane.showMessageDialog(null, "Error: "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }

    public boolean modificar_encargado_db(int cliente_cedula, encargado encargado) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();            
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");                       
            s.executeUpdate("UPDATE clinica.encargado"+
                    "SET "+
                    "id_encargado_cedula ="+encargado.getId_encargado_cedula()+
                    ",parentesco ='"+encargado.getParentesco()+"'"+
                    ",nombre ='"+encargado.getNombre()+"'"+
                    ",apellidos = "+encargado.getApellidos()+"'"+
                    ",fecha_nacimiento = "+formatter.format(encargado.getFecha_nacimiento())+"'"+
                    ",genero ='"+encargado.getGenero()+"'"+
                    ",direccion = "+encargado.getDireccion()+"'"+
                    ",telefono = "+encargado.getTelefono()+
                    ",celular = "+encargado.getCelular()+
                    ",fax = "+encargado.getFax()+
                    ",ocupacion = "+encargado.getOcupacion()+"'"+
                    ",lugar_trabajo = "+encargado.getLugar_trabajo()+"'"+
                    ",telefono_lugar_trabajo = "+encargado.getTelefono_lugar_trabajo()+
                    ",email = "+encargado.getEmail()+"'"+
                    " WHERE cliente="+cliente_cedula);
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }

    
    /****************************************************Historia Medica********************************************************************/
    
    public boolean insertar_historia_medica(historia_medica historia_medica) {
        Statement s;
        try{
            
            /*Arreglar el query*/
            
            s = (Statement) conn.createStatement();     
            s.executeUpdate("INSERT INTO `clinica`.`historia_medica`"+
                            "(cliente/*,nombre_medico,tipo_sangre,en_caso_emergencia_avisar,telefono,direccion,Parentesco,preguntas*/)"+
                            "VALUES("
                            +"'"+historia_medica.getCliente().getId_cliente_cedula()+"'"
                            /*+",'"+historia_medica.getNombre_medico()+"'"
                            +",'"+historia_medica.getTipo_sangre()+"'"
                            +",'"+historia_medica.getEn_caso_emergencia_avisar()+"'"
                            +","+historia_medica.getTelefono()
                            +",'"+historia_medica.getDireccion()+"'"
                            +",'"+historia_medica.getParentesco()+"'"
                            +",'"+historia_medica.getPreguntas()+"'"
                            +",'"+historia_medica.getPadecimientos()+"'"*/
                            +");");       
            return true;
        }catch (SQLException ex){
            JOptionPane.showMessageDialog(null, "Error: "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    public boolean modificar_historia_medica_db(historia_medica hm) {
        Statement s;
        try{
            s = (Statement) conn.createStatement();                        
            s.executeUpdate("UPDATE `clinica`.`historia_medica`"+
                    "SET "+
                    " cliente ="+hm.getCliente().getId_cliente_cedula()+""+
                    ",nombre_medico ='"+hm.getNombre_medico()+"'"+
                    ",tipo_sangre ='"+hm.getTipo_sangre()+"'"+
                    ",en_caso_emergencia_avisar ='"+hm.getEn_caso_emergencia_avisar()+"'"+
                    ",telefono ="+hm.getTelefono()+
                    ",direccion ='"+hm.getDireccion()+"'"+
                    ",Parentesco ='"+hm.getParentesco()+"'"+
                    ",preguntas ='"+hm.imprimir_preguntas()+"'"+
                    //"padecimientos="++","+
                    " WHERE cliente="+hm.getCliente().getId_cliente_cedula());
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    /****************************************************Tratamineto********************************************************************/

    public void agregar_tratamiento_db(tratamiento t) {  
        Statement s;
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        if(t != null){
            try{
                s = (Statement) conn.createStatement();     
                s.executeUpdate("INSERT INTO `clinica`.`tratamiento`"+
                                "(`cliente`,`fecha`,`pieza`,`descripcion`,`indicaciones`)"+
                                "VALUES("
                                +t.getCliente().getId_cliente_cedula()
                                +",'"+formatter.format(t.getFecha())+"'"
                                +",'"+t.getPieza()+"'"
                                +",'"+t.getDescripcion()+"'"
                                +",'"+t.getIndicaciones()+"'"
                                +");");         

            }catch (SQLException ex){
                JOptionPane.showMessageDialog(null, "Error: "+ex.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
            }//try
        }//if                
    }//func agregar_tratamiento_db

    public void cargar_lista_tratamineto_db(lista_tratamiento listaTratamiento, lista_cliente listaCliente) {
        Statement s;
        try{
            listaTratamiento.limpiar();
            s = (Statement) conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT * FROM tratamiento WHERE activo=1");
            while(rs.next()){                
                listaTratamiento.getLista().add(new tratamiento(rs.getInt("id_tratamiento"),
                                                listaCliente.buscarCliente(rs.getInt("cliente")),
                                                (Date) rs.getObject("fecha"),
                                                rs.getString("pieza"),
                                                rs.getString("descripcion"),
                                                rs.getString("indicaciones")));
            }//while   
            rs.close();
            System.out.println("Tratamientos cargados.");
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);
        }
    }

    public boolean modificar_tratamiento_db(tratamiento tratamiento) {
        Statement s;
        try{            
            s = (Statement) conn.createStatement();                        
            s.executeUpdate("UPDATE `clinica`.`tratamiento`"
                            +"SET"                            
                            +"`cliente`="+tratamiento.getCliente().getId_cliente_cedula()                            
                            +",`pieza` ='"+tratamiento.getPieza()+"'"
                            +",`descripcion` ='"+tratamiento.getDescripcion()+"'"
                            +",`indicaciones` ='"+tratamiento.getIndicaciones()+"'"
                            +"WHERE id_tratamiento="+tratamiento.getNumero());            
            return true;
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);            
            return false;            
        }
    }//func modificar_tratamiento_db

    public void eliminar_tratamiento_desactivar(int id_tratamiento) {
        Statement s;
        try{            
            s = (Statement) conn.createStatement();                        
            s.executeUpdate("UPDATE `clinica`.`tratamiento`"
                            +"SET "                            
                            +"activo=0"
                            +" WHERE id_tratamiento="+id_tratamiento);              
        }catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Error: "+e.getLocalizedMessage(), "", JOptionPane.ERROR_MESSAGE);                        
        }
    }

    

    

    

    

    

}
